/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package editorsvg.editor.herramientas;

import editorsvg.editor.formas.NodoTrayecto;
import editorsvg.editor.formas.NodoTrayecto.TipoNodo;
import editorsvg.editor.formas.Trayecto;
import java.awt.geom.Point2D;

/**
 *
 * @author Jorge Berjano
 */
public class AyudanteCreacionTrayecto {
    private Trayecto trayecto;
    
    
    private NodoTrayecto nodoAnterior;
    private NodoTrayecto nodoActual;
    private NodoTrayecto nodoSiguiente;

    public AyudanteCreacionTrayecto() {
        this.trayecto = new Trayecto();
    }

    public Trayecto getTrayecto() {
        return trayecto;
    }

public void iniciar(Point2D posicion) {
        nodoAnterior = null;

        nodoActual = new NodoTrayecto(TipoNodo.INICIAL, posicion, null, null);
        trayecto.agregar(nodoActual);
        prepararSiguiente(posicion);
    }

public void agregarNodo(Point2D posicion) {
        if (nodoSiguiente != null) {
            nodoSiguiente.setPosicion(posicion);
            trayecto.actualizarPath();
        }
        nodoAnterior = nodoActual;
        nodoActual = nodoSiguiente;
        nodoSiguiente = new NodoTrayecto(TipoNodo.RECTA, posicion, null, null);
        trayecto.agregar(nodoSiguiente);
    }

 public void prepararSiguiente(Point2D posicion) {
        nodoSiguiente = new NodoTrayecto(TipoNodo.RECTA, posicion, null, null);
        trayecto.agregar(nodoSiguiente);
    }

    public void siguientePosicion(Point2D posicion) {
        if (nodoSiguiente != null) {
            nodoSiguiente.setPosicion(posicion);
            trayecto.actualizarPath();
        }
    }

    public void siguientePosicionControl1(Point2D posicion) {
        if (nodoSiguiente != null) {
            nodoSiguiente.setTipo(TipoNodo.CURVA);
            nodoSiguiente.setPosicionControl1(posicion);
            trayecto.actualizarPath();
        }
    }

    public void anteriorPosicionControl2(Point2D posicion) {
        if (nodoAnterior != null) {
            nodoAnterior.setTipo(TipoNodo.CURVA);
            nodoAnterior.setPosicionControl2(posicion);
            trayecto.actualizarPath();
        }
    }

    public void actualPosicionControl2Simetrica() {
        Point2D posicionControl1 = nodoSiguiente.getPosicionControl1();
        Point2D posicion = nodoSiguiente.getPosicion();
        double dx = posicionControl1.getX() - posicion.getX();
        double dy = posicionControl1.getY() - posicion.getY();

        Point2D posicionControl2 = new Point2D.Double(posicion.getX() - dx, posicion.getY() - dy);
        nodoActual.setPosicionControl2(posicionControl2);
    }

    public void cerrar() {
        //nodos.remove(nodoSiguiente);
        if (nodoSiguiente != null) {
            nodoSiguiente.setTipo(TipoNodo.FINAL);
            trayecto.actualizarPath();
        }

    }

    
    
}
